package com.projeto.bola.web.grupoEsporte;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import com.projeto.bola.web.agendaPartida.AgendaPartida;
import com.projeto.bola.web.modalidade.Modalidade;
import com.projeto.bola.web.participanteGrupo.ParticipanteGrupo;
import com.projeto.bola.web.usuario.Usuario;


@Entity
@Table(name="grupo_esporte")
public class GrupoEsporte implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue
	private Integer id;
	
	@Column(name="nome_grupo")
	private String nomeGrupo;
	private String descricao;
	private String regulamento;
	
	@OneToOne
	@JoinColumn(name="id_modalidade")
	private Modalidade modalidade;
	
	@OneToOne
	@JoinColumn(name="id_usuario_presidente")
	private Usuario usuarioPresidente;

	@OneToMany (mappedBy="grupos")
    private List <ParticipanteGrupo> grupos; 
	
	@OneToMany(mappedBy="grupoEsporte", fetch=FetchType.LAZY)
	private List<AgendaPartida> agenda;
	
	
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getNomeGrupo() {
		return nomeGrupo;
	}

	public void setNomeGrupo(String nomeGrupo) {
		this.nomeGrupo = nomeGrupo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public String getRegulamento() {
		return regulamento;
	}

	public void setRegulamento(String regulamento) {
		this.regulamento = regulamento;
	}

	public Modalidade getModalidade() {
		return modalidade;
	}

	public void setModalidade(Modalidade modalidade) {
		this.modalidade = modalidade;
	}

	public Usuario getUsuarioPresidente() {
		return usuarioPresidente;
	}

	public void setUsuarioPresidente(Usuario usuarioPresidente) {
		this.usuarioPresidente = usuarioPresidente;
	}

	public GrupoEsporte(String nomeGrupo, String descricao, String regulamento,
			Modalidade modalidade, Usuario usuarioPresidente) {		
		this.nomeGrupo = nomeGrupo;
		this.descricao = descricao;
		this.regulamento = regulamento;
		this.modalidade = modalidade;
		this.usuarioPresidente = usuarioPresidente;
	}

	public GrupoEsporte() {		
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((descricao == null) ? 0 : descricao.hashCode());
		result = prime * result + ((grupos == null) ? 0 : grupos.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result
				+ ((modalidade == null) ? 0 : modalidade.hashCode());
		result = prime * result
				+ ((nomeGrupo == null) ? 0 : nomeGrupo.hashCode());
		result = prime * result
				+ ((regulamento == null) ? 0 : regulamento.hashCode());
		result = prime
				* result
				+ ((usuarioPresidente == null) ? 0 : usuarioPresidente
						.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		GrupoEsporte other = (GrupoEsporte) obj;
		if (descricao == null) {
			if (other.descricao != null)
				return false;
		} else if (!descricao.equals(other.descricao))
			return false;
		if (grupos == null) {
			if (other.grupos != null)
				return false;
		} else if (!grupos.equals(other.grupos))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (modalidade == null) {
			if (other.modalidade != null)
				return false;
		} else if (!modalidade.equals(other.modalidade))
			return false;
		if (nomeGrupo == null) {
			if (other.nomeGrupo != null)
				return false;
		} else if (!nomeGrupo.equals(other.nomeGrupo))
			return false;
		if (regulamento == null) {
			if (other.regulamento != null)
				return false;
		} else if (!regulamento.equals(other.regulamento))
			return false;
		if (usuarioPresidente == null) {
			if (other.usuarioPresidente != null)
				return false;
		} else if (!usuarioPresidente.equals(other.usuarioPresidente))
			return false;
		return true;
	}

	public List<ParticipanteGrupo> getGrupos() {
		return grupos;
	}

	public void setGrupos(List<ParticipanteGrupo> grupos) {
		this.grupos = grupos;
	}

	public List<AgendaPartida> getAgenda() {
		return agenda;
	}

	public void setAgenda(List<AgendaPartida> agenda) {
		this.agenda = agenda;
	}	
	
	
}
